home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / ASSEMMNT.PRG < prev    next >
Text File  |  1986-10-07  |  8KB  |  234 lines

  1. *
  2. * ASSEMMNT
  3. * MAINTAIN THE ASSEMBLY FILE DESCRIBING ASSEMBLY/SUBASSEMBLY PRODUCT STRUCTURE
  4. * FILE STRUCTURE MUST ALREADY EXIST
  5. SET HEADING OFF
  6. SET SAFETY OFF
  7. SET STATUS OFF
  8. CLEAR
  9. CLEAR ALL
  10. SET TALK OFF
  11. SET BELL OFF
  12. * DEFINE A STRING OF BLANKS
  13. STORE SPACE(80) TO BLANK
  14. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  15. STORE " " TO REQUEST
  16. STORE " " TO ACTION
  17. STORE "N" TO DATAIN
  18. STORE 0 TO RECCNT
  19. *
  20. *===============================START MODS: 1================================*
  21. * SET NAME OF FILE                                                           *
  22. STORE "ASSEMBLY" TO FILENAME
  23. * SETUP COUNT OF INDEXES FOR THE FILE filename
  24. STORE 2 TO IXCOUNT
  25. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  26. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  27. STORE "ASTOCKNO,SSTOCKNO" TO IXA
  28. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  29. STORE "ASM_STKNO" TO DIIXA
  30. STORE "SSTOCKNO,ASTOCKNO" TO IXB
  31. STORE "SUB_STKNO" TO DIIXB
  32. *==================================END MODS==================================*
  33. *
  34. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  35. STORE "IXA" TO LIVE_IX
  36. * FIND RECORD COUNT
  37. USE &FILENAME
  38. COUNT TO RECCNT
  39. * IF DBF FILE IS EMPTY, 'IF STATEMENT' WILL PREVENT 'RECORD OUT OF RANGE'
  40. * ERROR FROM OCCURING WHEN <A>dd OPTION OF SUBMENU IS CHOSEN.
  41. IF RECCNT = 1
  42.    RECCNT = RECCNT-1
  43. ENDIF
  44. * IF FILE IS EMPTY, ASSUME INDEXES NOT CREATED AND CREATE THEM.
  45.   IF RECCNT = 0 .AND. IXCOUNT>0
  46.    STORE 1 TO COUNT
  47.    DO WHILE COUNT<=IXCOUNT
  48.       STORE "IX"+CHR(64+COUNT) TO TEMP
  49.       STORE "DI"+TEMP TO TEMP2
  50.       IF IXCOUNT>1
  51.          STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  52.       ELSE
  53.          STORE &TEMP TO TEMP
  54.       ENDIF
  55.       STORE &TEMP2 TO TEMP2    
  56.       INDEX ON &TEMP2 TO &TEMP
  57.       STORE COUNT+1 TO COUNT
  58.    ENDDO
  59.   ENDIF
  60. * ADD INDEXES
  61. SET INDEX TO &IXA
  62. * POSITION AT FIRST RECORD IN LIVE INDEX SEQUENCE FOR INITIAL DISPLAY
  63. GO TOP
  64. *
  65. * MAIN UPDATE LOOP. TERMINATED BY 'M' AS REQUEST
  66. DO WHILE REQUEST<>"M"
  67. *
  68. *===============================START MODS: 2================================*
  69. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  70.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  71.    @ 3,16 SAY ">> Production System Assembly File Maintenance <<"
  72.    @ 5,17 SAY "Today's Date:"
  73.    ?? DATE()
  74. * SETUP VARIABLE PART OF MASK
  75.    CLEAR GETS
  76.    @ 7,1  SAY "Stock Number For This Assembly " GET ASM_STKNO
  77.    @ 9,1  SAY "Assembly Description " GET ASM_DESC
  78.    @ 11,1  SAY "Subassembly/Machine/Labor Component Code " GET SUB_STKNO
  79.    @ 13,1 SAY "Number of Units of Subassembly/Machine/Labor Required " ;
  80.    GET SUB_NOREQ
  81. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  82.    @ 15,1 SAY "Last Updated : "
  83.    ?? LAST_UPDT
  84. *==================================END MODS==================================*
  85. *
  86. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  87.    IF DELETE()
  88.       @ 5,1 SAY "* DELETED *"
  89.    ELSE
  90.       @ 5,1 SAY "           "
  91.    ENDIF
  92. * IDENTIFY RECORD
  93.    @ 5,62 SAY RECCNT
  94.    @ 5,50 SAY RECNO()
  95.    @ 5,43 SAY "Record"
  96.    @ 5,61 SAY "of"
  97. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  98.    IF DATAIN="Y"
  99.       @ 19,72 GET ACTION
  100.       READ
  101. * DATE STAMP RECORD
  102.       REPLACE LAST_UPDT WITH DATE()
  103.       IF REQUEST="E".OR.ACTION<>"C"
  104.          STORE "N" TO DATAIN
  105.          STORE " " TO REQUEST
  106.          STORE " " TO ACTION
  107.       ENDIF 2
  108.    ELSE
  109.       CLEAR GETS
  110.    ENDIF 1
  111. *
  112. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  113.    @ 19,0 SAY BLANK
  114.    @ 20,0 SAY "----------------------------------------"
  115.    @ 20,40 SAY "----------------------------------------"
  116.    @ 21,0 CLEAR
  117.    @ 21,2 SAY ;
  118. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  119.    @ 22,2 SAY ;
  120. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  121. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  122.    IF (","$&LIVE_IX)
  123.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  124.       @ 22,70 SAY TEMP
  125.    ELSE
  126.       @ 22,70 SAY &LIVE_IX
  127.    ENDIF
  128. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  129.    IF REQUEST<>"A"
  130.       STORE " " TO REQUEST
  131.       STORE " " TO ACTION
  132.       @ 23,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  133.       READ
  134.       STORE UPPER(REQUEST) TO REQUEST
  135.    ENDIF
  136. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  137.    @ 21,0 CLEAR
  138.    DO CASE
  139. * ADD NEW CASE OR EDIT DISPLAYED CASE
  140.       CASE REQUEST="A".OR.REQUEST="E"
  141. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  142.          IF REQUEST="A"
  143.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  144. ELSE TO QUIT"
  145.             APPEND BLANK
  146.             STORE RECCNT+1 TO RECCNT
  147.             GO RECCNT
  148.          ELSE
  149.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  150. SUBMENU     "
  151.          ENDIF
  152.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  153.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  154.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  155. * SET FLAG TO CAUSE NEW DATA TO BE READ
  156.          STORE "Y" TO DATAIN
  157. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  158.       CASE REQUEST="D"
  159.          IF DELETE()
  160.             RECALL
  161.          ELSE
  162.             DELETE
  163.          ENDIF
  164. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  165.       CASE REQUEST="P"
  166.          SKIP -1
  167. * NEXT 3 LINES SECURE THE BACKWARD LOOP
  168.          IF BOF()
  169.             GO BOTTOM
  170.          ENDIF
  171. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  172.       CASE REQUEST="N"
  173.          SKIP +1
  174. * NEXT 3 LINES SECURE FORWARD LOOP
  175.          IF EOF()
  176.             GO TOP
  177.          ENDIF
  178. * GET SEARCH VALUE FOR INDEXED SEARCH
  179.       CASE REQUEST="F"
  180. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  181.          STORE "DI"+LIVE_IX TO IXDEF
  182.          STORE &IXDEF TO SV
  183.          STORE &SV TO SV
  184.          @ 21,1 SAY ;
  185.          "ENTER SEARCH VALUE. VALUE SHOWN IS FROM THE DISPLAYED RECORD. PRESS"
  186.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  187.          READ
  188. * REMOVE TRAILING BLANKS BEFORE SEARCH
  189.          STORE TRIM(SV) TO SEARCH
  190. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  191.          STORE RECNO() TO NOW
  192.          SEEK SEARCH
  193. * NEXT 3 LINES KEEP PRESENT RECORD DISPLAYED IF NO FIND
  194.          IF EOF()
  195.             GOTO NOW
  196.          ENDIF
  197. * CHANGE INDEX
  198.       CASE REQUEST="K"
  199.          STORE RECNO() TO RECNOW
  200.          STORE " " TO IXCHOICE
  201. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  202.          @ 21,9 SAY " "
  203.          STORE 1 TO COUNT
  204.          DO WHILE COUNT<=IXCOUNT
  205.             STORE "IX"+CHR(64+COUNT) TO TEMP
  206.             IF IXCOUNT>1
  207.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  208.             ELSE
  209.                ?? CHR(64+COUNT)+". "+&TEMP
  210.             ENDIF
  211.             STORE COUNT+1 TO COUNT
  212.          ENDDO
  213.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  214.          READ
  215.          STORE UPPER(IXCHOICE) TO IXCHOICE
  216.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  217.             STORE "IX"+IXCHOICE TO LIVE_IX
  218.             STORE &LIVE_IX TO TEMP
  219.             SET INDEX TO &TEMP
  220.          ENDIF
  221. * GOTO THIS RECORD TO ACTIVATE INDEX
  222.          IF RECNOW>0
  223.             GO RECNOW
  224.          ELSE
  225.             GO BOTTOM
  226.          ENDIF
  227.    ENDCASE
  228. ENDDO
  229. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  230. CLEAR
  231. RETURN
  232.  
  233.  
  234.